package data;

import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @Author: Wy
 * @Email: DysonWy@foxMail.com
 * @Time: 2020/4/7 17:14
 * @Description:
 */
@Data
@Accessors(chain = true)
@NoArgsConstructor
public class BinaryTree<T> {
    BinaryTree leftNode;
    T data;
    BinaryTree rightNode;

    /**
     * 前序遍历
     *
     * @param binaryTree 根节点开始,首先遍历左子树,后遍历当前节点右子树
     */
    public void beforeTraverse(BinaryTree<T> binaryTree) {
        if (binaryTree == null) {
            return;
        }
        T data = binaryTree.getData();
        // TODO: 2020/4/7 节点业务处理,后续通过lambda实现
        beforeTraverse(binaryTree.leftNode);
        beforeTraverse(binaryTree.rightNode);
    }

    /**
     * 中序遍历
     *
     * @param binaryTree 从左子树最小节点开始,遍历当前节点右子树
     */
    public void middleTraverse(BinaryTree<T> binaryTree) {
        if (binaryTree == null) {
            return;
        }
        middleTraverse(binaryTree.leftNode);
        T data = binaryTree.getData();
        // TODO: 2020/4/7 节点业务处理,后续通过lambda实现
        middleTraverse(binaryTree.rightNode);
    }

    /**
     * 后序遍历
     *
     * @param binaryTree 从左子树最小节点右子树开始,遍历当前节点右子树
     */
    public void afterTraverse(BinaryTree<T> binaryTree) {
        if (binaryTree == null) {
            return;
        }
        afterTraverse(binaryTree.leftNode);
        afterTraverse(binaryTree.rightNode);
        // TODO: 2020/4/7 节点业务处理,后续通过lambda实现
        T data = binaryTree.getData();
    }
}
